package com.ptrprograms.videoplayer;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.MediaController;
import android.widget.ProgressBar;
import android.widget.VideoView;
/**
* Created by PaulTR on 5/25/14.
*/
public class VideoPlayerActivity extends Activity {
public static final String EXTRA_VIDEO_URL = "video_url";
protected static final String EXTRA_IS_PLAYING = "is_playing";
protected static final String EXTRA_CURRENT_POSITION = "current_position";
protected MediaController mMediaController;
protected MediaPlayer mMediaPlayer;
protected VideoView mVideoView;
protected ProgressBar mSpinningProgressBar;
protected Uri mUri;
protected int mPosition;
private String TAG = VideoPlayerActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView( R.layout.activity_videoplayer );
if( getIntent() == null || getIntent().getExtras() == null || TextUtils.isEmpty( getIntent().getExtras().getString( EXTRA_VIDEO_URL ) ) ) {
showErrorMessage(0, 0);
return;
}
initViews();
setupMediaController();
}
protected void initViews() {
mSpinningProgressBar = (ProgressBar) findViewById( R.id.progress_spinner );
mVideoView = (VideoView) findViewById( R.id.video_view );
mVideoView.setOnCompletionListener( onCompletionListener );
mVideoView.setOnErrorListener( onErrorListener );
mVideoView.setOnPreparedListener( onPreparedListener );
if( mVideoView == null ) {
throw new IllegalArgumentException( "Layout must contain a video view with ID video_view" );
}
mUri = Uri.parse( getIntent().getExtras().getString( EXTRA_VIDEO_URL ) );
mVideoView.setVideoURI( mUri );
}
@Override
protected void onDestroy() {
super.onDestroy();
releaseVideoListeners();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if( mVideoView == null || mVideoView.getCurrentPosition() == 0 )
return;
outState.putInt( EXTRA_CURRENT_POSITION, mVideoView.getCurrentPosition() );
outState.putBoolean( EXTRA_IS_PLAYING, mVideoView.isPlaying() );
mVideoView.pause();
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
if( mVideoView == null || savedInstanceState == null )
return;
if( savedInstanceState.getBoolean( EXTRA_IS_PLAYING, false ) ) {
mVideoView.seekTo(savedInstanceState.getInt(EXTRA_CURRENT_POSITION, 0));
mVideoView.start();
}
}
protected void setupMediaController() {
mMediaController = new MediaController( this );
mMediaController.setEnabled(true);
mMediaController.show();
mMediaController.setMediaPlayer( mVideoView );
}
protected void releaseVideoListeners() {
mVideoView.setOnCompletionListener( null );
mVideoView.setOnErrorListener( null );
mVideoView.setOnPreparedListener( null );
}
@Override
protected void onResume() {
super.onResume();
mVideoView.seekTo( mPosition );
mSpinningProgressBar.setVisibility( View.VISIBLE );
}
@Override
protected void onPause() {
super.onPause();
mPosition = mVideoView.getCurrentPosition();
}
protected MediaPlayer.OnCompletionListener onCompletionListener = new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
mVideoView.seekTo( 0 );
if( mVideoView.isPlaying() )
mVideoView.pause();
if( !mMediaController.isShowing() )
mMediaController.show();
}
};
protected MediaPlayer.OnErrorListener onErrorListener = new MediaPlayer.OnErrorListener() {
@Override
public boolean onError( MediaPlayer mediaPlayer, int what, int extra ) {
try {
mVideoView.stopPlayback();
} catch( IllegalStateException e ) {
Log.e( TAG, e.getStackTrace().toString() );
}
showErrorMessage( what, extra );
return true;
}
};
protected void showErrorMessage( int what, int extra ) {
String errorMessage;
AlertDialog.Builder builder = new AlertDialog.Builder( this );
errorMessage = getResources().getString( R.string.default_video_error );
builder.setMessage( errorMessage ).setTitle( getResources().getString( R.string.default_video_error_title ) );
builder.setNegativeButton(getResources().getString(R.string.default_negative_button), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
finish();
}
});
builder.setCancelable( false );
AlertDialog errorDialog = builder.create();
errorDialog.show();
}
protected MediaPlayer.OnPreparedListener onPreparedListener = new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
if( mediaPlayer == null )
return;
mMediaPlayer = mediaPlayer;
mediaPlayer.start();
if( mSpinningProgressBar != null )
mSpinningProgressBar.setVisibility( View.GONE );
mVideoView.setMediaController( mMediaController );
}
};
}